#include "Matrice.h"

Matrice::Matrice(int nbLigne, int nbColonne)
{
    this->nbLigne = nbLigne;
    this->nbColonne = nbColonne;
    matrice = new float*[nbLigne];
    for(int i = 0; i < nbLigne; ++i)
    {
        matrice[i] = new float[nbColonne];
    }
    setIdentite();
}

void Matrice::setIdentite()
{
    for(int i = 0; i < nbLigne; ++i)
    {
        for(int j = 0; j < nbColonne; j++)
        {
            if(i == j) matrice[i][j] = 1;
            else matrice[i][j] = 0;
        }
    }
}

void Matrice::inserer(int indiceLigne, int indiceColonne, float valeur)
{
    matrice[indiceLigne][indiceColonne] = valeur;
}

float Matrice::get(int indiceLigne, int indiceColonne) const
{
    return matrice[indiceLigne][indiceColonne];
}

Matrice& Matrice::operator+(const Matrice &matrice2)
{
    Matrice aux(nbLigne, nbColonne);
    if(matrice2.getNbColonne() == nbColonne && matrice2.getNbLigne() == nbLigne)
    {
        for(int i = 0; i < nbLigne; ++i)
        {
            for(int j = 0; j < nbColonne; j++)
            {
                aux.inserer(i,j,this->get(i,j)+matrice2.get(i,j));
                //aux.matrice[i][j] = this->matrice[i][j] + matrice2.matrice[i][j]; // non testé !!
            }
        }
    }
    return aux;
}

void Matrice::affiche(){

    for(int i = 0; i < nbLigne; ++i)
    {
        cout<<"|";
        for(int j = 0; j < nbColonne; j++)
        {

           cout<<matrice[i][j]<<"|";
        }
        cout<<"\n";
    }
}

int Matrice::getNbColonne() const
{
    return nbColonne;
}

int Matrice::getNbLigne() const
{
    return nbLigne;
}
